package com.cy.java;

import org.junit.Test;

/**
 * 关于StringBuffer和StringBuilder的使用
 */
public class StringBufferBuiderTest {
    /**
     * 三者异同：
     * String: 不可变的字符序列，底层用char[]存储
     * StringBuffer:可变的字符序列，线程安全的，效率低；底层用char[]存储
     * StringBuilder:可变的字符序列，jdk5.0新增，线程不安全的，效率高；底层用char[]存储
     *
     * 源码分析：
     * String str = new String();//new char[0];
     * String str1 = new String("abc");//new char[]{'a','b','c'};
     *
     *StringBuffer sb1 = new StringBuffer();//new char[16];底层创建了一个长度16的数组
     * sb1.append('a');//value[0]='a';
     * sb1.append('b');//value[1]='b';
     *
     * StringBuffer sb2 = new StringBuffer("abc");
     * //new char["abc".length()+16];
     *
     * 问题1：System.out.println(sb2.length);//3
     * 问题2：扩容问题：如果要添加的数据底层数组盛不下了，那就需要扩容底层的数组
     *
     *
     */

        @Test
         public void test1(){
        StringBuffer sb1 = new StringBuffer("abc");
        sb1.setCharAt(0,'m');
            System.out.println(sb1);
        }

}
